Array.prototype@@iterator
let array = [0.1, 2, "345", {six: 6}, [{key: 6},{key: 7},{key: 8}], 9]
const iterator = array[Symbol.iterator]()
for (const value of iterator) {
console.log(value)
}
// 有點類似 python for ... in ...
// 就可以不用老是用代index去取值
Array.prototype.at()
let array = [0.1, 2, "345", {six: 6}, [{key: 6},{key: 7},{key: 8}], 9]
console.log(array.at(0)) // 0.1
console.log(array.at(-1)) // 9
console.log(array.at(20)) // 超過範圍則回傳undefined
// 可以傳入正負整數,負的就是從尾巴往前算
// 相比於 array[0], array[1], ... 這樣的取值方式,at()提供更靈活的操控方式
// 另外: array[-1] 會得到這個array的長度
// 有點類似 python array[-1]的概念
Array.prototype.concat()
// 串接一至多個array
let array = [0.1, 2, "345", {six: 6}, [{key: 6},{key: 7},{key: 8}], 9]
let array1 = [0.1, 2, "345"]
let array2 = [{six: 6}]
let array3 = [[{key: 6},{key: 7},{key: 8}]]
let array4 = [9]
const concat1_2 = array1.concat(array2)
console.log(concat1_2)
const concat1_2_3_4 = array1.concat(array2, array3, array4)
console.log(concat1_2_3_4)
console.log(array)
console.log(array === concat1_2_3_4)
> Array [0.1, 2, "345", Object { six: 6 }]
> Array [0.1, 2, "345", Object { six: 6 }, Array [Object { key: 6 }, Object { key: 7 }, Object { key: 8 }], 9]
> Array [0.1, 2, "345", Object { six: 6 }, Array [Object { key: 6 }, Object { key: 7 }, Object { key: 8 }], 9]
> false
// 即便 array 與 concat1_2_3_4 內容相同,但兩者的記憶體位置不同,不能用一般的 operator 辨識兩者是否有同樣的內容
Array.prototype.copyWithin()
// copyWithin(target, start)
// copyWithin(target, start, end)
let array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
console.log(array.copyWithin(0, 6))
// array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
// ^^^^^^^^^^
// > Array [6, 7, 8, 9, 4, 5, 6, 7, 8, 9]
// ^^^^^^^^^^
console.log(array.copyWithin(0, 2, 8))
// > Array [6, 7, 8, 9, 4, 5, 6, 7, 8, 9] <-- array 已經改變了
// ^^^^^^^^^^^^^^^^
// > Array [8, 9, 4, 5, 6, 7, 6, 7, 8, 9]
// ^^^^^^^^^^^^^^^^
Array.prototype.entries()
// 回傳 [key, value] 形式的 iterator
const array = ['a', 'b', 'c'];
const iterator = array.entries();
// 用前幾天學到的 array destructuring 拆開 key n value
for (const [key, value] of iterator) {
console.log(`array[${key}]=${value}`)
}
Array.prototype.every()
// every(callbackFn)
// every(callbackFn, thisArg)
// 給定一個test function
// 檢查 array 中的每一個 element 經過 test function 是否回傳 true
let array1 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
let array2 = [0, 1, "2", 3, 4, "5", 6, 7, 8, 9]
function isNumber(item) {
if (typeof(item) === "number") return true;
else return false;
}
console.log(array1.every(isNumber)) // true
console.log(array2.every(isNumber)) // false
// 精簡1
function isNumber2(item) {
return typeof(item) === "number"
}
// 精簡2
const isNumber = (item) => {return typeof(item)==="number"}